﻿'Nombre:                         Manejador
'Descripcion:                    Clase que controla todas las operaciones sobre el catalogo de cuentas
'Dependencias:                 
'Fecha de creación:              20090613
'Autor:                          VMORALES
'Fecha de modifcación:         
'Responsable:                  
'Num. de modifcación:            0

Option Explicit On
Option Strict On

#Region "Imports"

Imports Electrocucaracha.AdminPersonal.DAO
Imports System.Linq
Imports Electrocucaracha.AdminPersonal.Utils.Manejador

#End Region

Namespace Cuenta

    ''' <summary>
    ''' Clase que controla todas las operaciones sobre el catalogo de cuentas
    ''' </summary>
    Public Class Manejador

#Region "Constantes"

#End Region

#Region "Miembros"

        Public Shared Event CuentasActivasCambiadas()
        Public Shared Event CuentaCambiada()
        Public Shared Event CuentasCambiadas()

        Private Shared _dao As ICuentaDao = Nothing                                             'Clase de acceso a los datos en la base de datos
        Private Shared _cuentasRegistradas As Entidades.CuentaDTO() = Dao.Obtener()                'Cache de cuentas registradas en la base de datos
        Private Shared _cuentaSeleccionada As Entidades.CuentaDTO = Nothing                        'Cuenta la cual se encuentra seleccionada para trabajar
        Private Shared _cuentasActivasRegistradas As Entidades.CuentaDTO() = Dao.ObtenerActivos()  'Cache de cuentas activas registradas en la bases de datos

#End Region

#Region "Propiedades"

        ''' <summary>
        ''' Clase de acceso a los datos en la base de datos
        ''' </summary>
        ''' <value></value>
        ''' <returns>Unica instancia para el manejo de datos</returns>
        Public Shared ReadOnly Property Dao() As ICuentaDao
            Get
                If _dao Is Nothing Then
                    _dao = DirectCast(Application.Ctx.GetObject("CuentaDao"), ICuentaDao)
                End If

                Return _dao
            End Get
        End Property

        ''' <summary>
        ''' Cache de cuentas registradas en la base de datos
        ''' </summary>
        ''' <value>Conjunto de instancias de cuentas</value>
        ''' <returns></returns>
        Public Shared Property Cuentas() As Entidades.CuentaDTO()
            Private Set(ByVal value As Entidades.CuentaDTO())
            End Set
            Get
                Manejador.Cuentas = Dao.Obtener()
                Return _cuentasRegistradas
            End Get
        End Property

        ''' <summary>
        ''' Cuenta la cual se encuentra seleccionada para trabajar
        ''' </summary>
        ''' <value>Cuenta seleccionada en la aplicacion a ser validada contra lo existente en la base de datos</value>
        ''' <returns>Instancia de la cuenta actual</returns>
        Public Shared Property Seleccion() As DAO.Entidades.CuentaDTO
            Get
                Return _cuentaSeleccionada
            End Get
            Set(ByVal value As DAO.Entidades.CuentaDTO)
                Dim existe As Boolean = Dao.Existe(value)

                If Not value.Equals(_cuentaSeleccionada) AndAlso existe Then
                    _cuentaSeleccionada = value
                    RaiseEvent CuentaCambiada()
                ElseIf Not existe Then
                    Throw New ArgumentException("No existe la cuenta seleccionada")
                End If
            End Set
        End Property

        ''' <summary>
        ''' Cache de cuentas activas registradas en la base de datos
        ''' </summary>
        ''' <value>Conjunto de instancias de cuentas</value>
        ''' <returns></returns>
        Public Shared Property CuentasActivas() As Entidades.CuentaDTO()
            Private Set(ByVal value As Entidades.CuentaDTO())
                If Not value.Equals(_cuentasActivasRegistradas) Then
                    _cuentasActivasRegistradas = value
                    RaiseEvent CuentasActivasCambiadas()
                End If
            End Set
            Get
                Return _cuentasActivasRegistradas
            End Get
        End Property

#End Region

#Region "Contructores"

#End Region

#Region "Funciones"

#End Region

    End Class

End Namespace